/*
 * @Author: wangyongcun@persagy.com
 * @Date: 2025-03-02 11:35:37
 * @LastEditTime: 2025-03-23 10:21:16
 * @FilePath: \vite-admin\vite.config.ts
 * @Description:
 *
 */
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { fileURLToPath, URL } from "url";

// 注入loading
import { injectAppLoadingPlugin } from './src/plugins/loading/injectAppLoadingPlugin'

// 按需引入组件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// 按需导入图标
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'

// 使svg作为组件使用
import svgLoader from 'vite-svg-loader'

// UnoCSS
import UnoCSS from 'unocss/vite'

// 引入pkg信息
import { name } from "./package.json";

// https://vite.dev/config/
export default defineConfig({
  base: '/' + name,
  // 全局变量
  define: {},
  // 环境变量
  envDir: './env',
  // 插件
  plugins: [
    injectAppLoadingPlugin(),
    vue(),
    UnoCSS(),
    svgLoader(),
    AutoImport({
      // 自动导入 Vue 相关函数，如：ref, reactive, toRef ;Composition API 宏
      imports: [
        "vue",
        "vue/macros",
        "@vueuse/core",
        "pinia",
        "vue-router",
        // 自动导入@/store下的模块
        {
          '@/store': [
            'useUserStore',
            'useAppSetting',
          ]
        }
      ],
      // 生成 `auto-imports.d.ts` 全局声明
      dts: "types/auto-imports.d.ts",
      resolvers: [
        // 自动导入 Element Plus 相关函数，如：ElMessage, ElMessageBox... (带样式)
        ElementPlusResolver(),
      ]
    }),
    Components({
      directoryAsNamespace: true, // 组件名称包含目录，防止同名组件冲突
      deep: true, // 启用子目录递归搜索
      resolvers: [
        // 自动注册图标组件
        IconsResolver({
          prefix: "i",
          enabledCollections: ['ep', 'material-symbols'],
        }),
        // 自动导入 Element Plus 组件
        ElementPlusResolver(),
      ],
      // 导入组件类型声明文件路径 (false:关闭自动生成)
      dts: "types/components.d.ts",
    }),
    Icons({
      compiler: 'vue3',
      autoInstall: true,
    })
  ],
  // 路径别名
  resolve: {
    alias: {
      "~": fileURLToPath(new URL("./", import.meta.url)),
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  // 服务启动配置项
  server: {
    proxy: {
      "/api": {
        target: "https://apifoxmock.com/m1/5901042-5587913-default",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      },
    },
  },
})
